package com.company.project.service;
import com.company.project.core.Result;
import com.company.project.model.SysFunction;
import com.company.project.model.SysFunctionMenuDto;
import com.company.project.model.SysFunctionTreeDto;
import com.company.project.model.SysResAuth;
import com.company.project.core.Service;

import java.util.HashMap;
import java.util.HashSet;
import java.util.List;


/**
 * Created by CodeGenerator on 2020/04/18.
 */
public interface SysResAuthService extends Service<SysResAuth> {

    /**
     * 批量添加功能权限
     * @param roleId 角色ID
     * @param res 资源列表
     * @return
     */
    public Result batchAddResAuth(int roleId, List<HashMap<String, Integer>> res);

    /**
     * 批量修改功能权限
     * @param roleId 角色ID
     * @param res 资源列表
     * @return
     */
    public Result batchUpdateResAuth(int roleId, List<HashMap<String, Integer>> res);


    /**
     * 查询功能权限列表
     * @param userId 用户ID
     * @return
     */
    public Result queryResAuthList(int userId);

    /**
     * 查询功能列表
     * @param roleId 角色ID
     * @return
     */
    public Result queryResListTreeByRole(int roleId, int functionId, int type);

    /**
     * 查询子功能树
     * @param functionList 功能列表
     * @param resAuths 权限列表
     * @param functionId 功能列表
     * @param type 功能类型
     * @return
     */
    public List<SysFunctionTreeDto> getChildrenTree(List<SysFunctionTreeDto> functionList, List<SysResAuth> resAuths
            , int functionId, int type);

    /**
     * 查询子功能
     * @param pId 父功能id
     * @param type 功能类型
     * @return
     */
    public List<SysFunctionMenuDto> queryMenuListByPid(List<SysFunctionMenuDto> functionList, HashSet<Integer> resAuths, int pId, int type);

    /**
     * 查询子菜单（不查询子集）
     * @param pId 父id
     * @param type 类型
     * @return
     */
    public List<SysFunction> selectByParentId(int pId, int type);
    /**
     * 查询子菜单（不查询子集）
     * @param pId 父id
     * @param type 类型
     * @return
     */
    public List<SysFunction> selectByParentIdPlus(int pId, int type, int currentUserId);

    /**
     * 查询菜单
     * @param userId
     * @param type
     * @return
     */
    public Result getFunctionByUser(int userId, int type, int currentId);

    /**
     * 查询菜单
     * @param userId
     * @param type
     * @return
     */
    public Result getFunctionTreeByUser(int userId, int type, int currentId);

    public Result getFunctionTreeByRole(int roleId, int type, Integer currentId);
}
